package cn.itsource.org.domain;

import cn.itsource.basic.domain.BaseDomain;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;

/**
 * 部门的实体类
 *
 *    建表注意事项：
 *       创建时间
 *       修改时间
 *       备注
 *
 */
@Data
@AllArgsConstructor    // 有参构造器
@NoArgsConstructor   // 无参构造器
@Table(name = "t_department")    // 当前操作哪张表
public class Department extends BaseDomain {

    //部门编号
    @Size(min = 3,max = 6,message = "你不合适！！")   // 长度校验
    private String sn;
    //部门名称
    @NotBlank(message = "不能输入空的")       // 判空校验
    private String name;
    //部门路径
    private String dirPath;
    //部门状态：1启用,0禁用
    private Integer state = 1;
    //部门经理ID
    private Long managerId;
    //上级部门ID
    private Long parentId;

    @Transient   // 被注解的字段是一个临时字段，不参与表的增删改操作
    private String managerName;     // 部门经理名称


    @Transient   // 被注解的字段是一个临时字段，不参与表的增删改操作
    private String parentName;     // 上级部门名称


    @Transient   // 被注解的字段是一个临时字段，不参与表的增删改操作
    private Long[] parentIds;     // 部门的数据结构


    @Transient     // 临时字段
    @JsonInclude(JsonInclude.Include.NON_EMPTY)        // 如果字段里面的数据是空的，就自动剔除
    private List<Department> children = new ArrayList<>();
}
